package com.itheima.web;

import com.itheima.common.R;
import org.apache.tomcat.util.http.fileupload.IOUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

@RestController
public class FileController {

    @Value("${file_path}")
    private String filePath;

    //文件上传
    @PostMapping("/common/upload")
    public R upload(MultipartFile file) throws IOException {


        //需求： 把上传的文件保存起来，然后返回图片的名字【包括后缀名】
        //1.  构建唯一的文件名字 【UUID】
        String prefix = UUID.randomUUID().toString().replaceAll("-", "");

        //2. 获取到上传文件的后缀
        String originName = file.getOriginalFilename();//  aa.png
        String suffix = originName.substring(originName.lastIndexOf(".")); //  .png

        //a49cd913d7.png
        String fileName = prefix  + suffix;

        //3. 构建保存的地址路径，如果文件夹不存在，要先创建文件夹
        File diretory = new File(filePath);
        if(!diretory.exists()){
            diretory.mkdirs();
        }

        //4. 保存文件到指定的位置
        file.transferTo(new File( diretory, fileName));

        //5. 返回图片的名字给前端。【包括后缀名】
        return R.success(fileName);
    }

    //文件下载
    @GetMapping("/common/download")
    public void download(String name , HttpServletResponse resp) throws Exception {

        //1. 构建文件对象
        File file = new File(filePath , name);

        //2. 把文件读取成输入流
        FileInputStream is = new FileInputStream(file);

        //3. 获取输出流对象
        ServletOutputStream os = resp.getOutputStream();

        //4. IO对接
        IOUtils.copy(is , os);

        /*byte [] buffer = new byte[1024];
        int len = 0 ;
        while( (len = is.read(buffer) ) != -1){
            os.write(buffer , 0 , len);
        }*/

        is.close();

    }
}
